import java.util.Observable;
import java.util.Observer;

public class IHM implements Observer {
	
	//----------------Arguments--------------------------------------------------------------------------
	private Fenetre fenetre;
	private Inserer inserer;
	private Supprimer supprimer;
	private Copier copier;
	private Coller coller;
	private Buffer buffer;
	private Defaire defaire;
	private Refaire refaire;
	private Rejouer rejouer;
	private EnregistrerEtat enregistrerEtat;
	private EnregistrerCommande enregistrerCommande;
	private Boolean etatEnregistrerCommande;
	
	
	public IHM(Fenetre fe) {
		this.fenetre = fe;
		this.buffer = new Buffer();
		this.inserer = new Inserer(buffer, this);
		this.supprimer = new Supprimer(buffer, this);
		this.copier = new Copier(buffer, this);
		this.coller = new Coller(buffer, this);
		this.refaire = new Refaire(buffer);
		this.defaire = new Defaire(buffer);
		this.rejouer = new Rejouer(buffer);
		this.enregistrerEtat = new EnregistrerEtat(buffer);
		this.enregistrerCommande = new EnregistrerCommande(buffer);
		buffer.addObserver(this);
	}

	//----------------Methodes--------------------------------------------------------------------------

	public String getTextInserer(){
		return fenetre.getTextInserer();
	}
	
	public int getDebutSelection(){
		return fenetre.getDebutSelection();
	}
	
	public int getFinSelection(){
		return fenetre.getFinSelection();
	}
	
	public void inserer()
	{
		this.inserer.execute();
		this.enregistrerEtat.execute();
	}

	public void copier()
	{
		this.copier.execute();
		this.enregistrerEtat.execute();
	}

	public void coller()
	{
		this.coller.execute();
		this.enregistrerEtat.execute();
	}

	public void couper()
	{
		this.copier.execute();
		this.supprimer.execute();
		this.enregistrerEtat.execute();
	}
	
	public void supprimer() {
		this.supprimer.execute();
		this.enregistrerEtat.execute();
	}
	
	public void defaire() {
		this.defaire.execute();	
	}
	
	public void refaire() {
		this.refaire.execute();	
	}
	
	public void rejouer() {
		this.rejouer.execute();	
	}

	public void update(Observable observable, Object objectConcerne) {
		String text = buffer.getText();
		fenetre.rafraichir(text);
	}
}
